﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Telerik.Web.UI;
using Company.Merchandising.BusinessLayer.DataTransferObjects;
using System.Web.Configuration;
using Company.Merchandising.ServiceLayer.MenuManagement.Exceptions;
using System.Web;

namespace Company.Merchandising.ServiceLayer.MenuManagement
{
    public class MenuManager
    {
        private static string MENU_CONFIGURATION_SECTION_NAME = "menuManager";

        //private RadMenu _menu;

        //private RadMenu Menu
        //{
        //    get
        //    {
        //        if (_menu == null)
        //        {
        //            _menu = LoadMenu();
        //        }

        //        return _menu;
        //    }
        //    set
        //    {
        //        _menu = value;
        //    }
        //}

        public RadMenu GetRadMenu(List<DTOFaculty> ownedFaculties)
        {
            //na chwile wylaczone filtrowanie po rolach
            //RadMenu radMenu = LoadMenu();
            //MenuAuthorizationManager.AuthorizeMenu(radMenu, ownedFaculties);
            //return radMenu;

            return LoadMenu();
        }

        private RadMenu LoadMenu()
        {
            MenuConfigurationSection menuConfigurationSection = WebConfigurationManager.GetSection(MENU_CONFIGURATION_SECTION_NAME) as MenuConfigurationSection;
            if (menuConfigurationSection == null)
            {
                throw new InvalidMenuConfigurationException("Nie udało się pobrać sekcji konfiguracyjnej dla obiektu menu.");
            }

            string menuPath = menuConfigurationSection.MenuFilePath;
            if (string.IsNullOrEmpty(menuPath))
            {
                throw new InvalidMenuConfigurationException("W sekcji konfiguracji dla obiektu menu nie ustawiono sciezki do pliku XML z definicja menu.");
            }

            RadMenu menu;
            try
            {
                menu = new RadMenu();
                menu.LoadContentFile(menuPath);
            }
            catch (Exception ex)
            {
                throw new LoadingMenuException("Nie udało się załadować menu na podstawie definicji z podanego pliku.", ex);
            }
            
            return menu;
        }
    }
}
